// pages/category/category.js
// 引入用来发送请求的方法,切记引入的时候补全路径
import { request } from "../../request/index.js";
import regeneratorRuntime from '../../lib/runtime/runtime';

Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 左侧菜单数据
    leftMenuList: [],
    // 右侧的商品数据
    rightContent: [],
    // 被点击的左侧菜单
    currentIndex: 0,
    // 右侧滚动条距离顶部的位置 
    scrollTop:0
  },
  // 接口的返回数据
  Cates: [],
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    /*
    0. web中的本地存储 和小程序的本地存储的方式不一样
      0.1 写代码的方式不一样
        web: localStorage.setItem("key","value") ,  localStorage.getItem("key")
        小程序中： wx.setStorageSync('key', "value");  wx.getStorageSync('key');
      0.2 存的时候有没有做类型转换
        web: 不管什么数据类型，最终都会调一样 toString()， 把数据变成字符串 再存入进去
        小程序： 你存的类型和取的类型一致
    1.先判断一下本地存储中有没有旧的数据
      {time:Date.mow(),data:[...]}
    2.没有旧数据 直接发送新请求
    3.有旧数据 同时 旧的数据也没有过期 就使用 本地存储中的旧数据即可
    */
    // 1.获取本地存储中的数据 （小程序中也是存在本地存储 技术）
    const Cates = wx.getStorageSync('cates');
    // 2.判断
    if (!Cates) {
      // 不存在 发送请求获取数据
      this.getCates();
    } else {
      // 有旧数据 定义一个过期时间  10s 改成 5分钟
      if (Date.now() - Cates.time > 1000 * 10) {
        // 重新发出请求
        this.getCates();
      } else {
        // 可以使用旧数据
        this.Cates = Cates.data;
        // 对数据进行渲染
        // 构造左侧的大菜单数据
        let leftMenuList = this.Cates.map(v => v.cat_name);
        // 构造右侧的商品数据
        let rightContent = this.Cates[0].children;
        this.setData({
          leftMenuList,
          rightContent
        })
      }
    }
  },


  // 获取分类数据
  async getCates() {
    // request({
    //   url: '/categories',
    // }).then(result => {
    //   // this.setData({
    //   //   swiperList: result.data.message
    //   // })
    //   // console.log(result);
    //   this.Cates = result.data.message;

    //   // 把接口的数据存到本地存储中
    //   wx.setStorageSync('cates', {
    //     time: Date.now(),
    //     data: this.Cates
    //   });

    //   // 构造左侧的大菜单数据
    //   let leftMenuList = this.Cates.map(v => v.cat_name);
    //   // 构造右侧的商品数据
    //   let rightContent = this.Cates[0].children;
    //   this.setData({
    //     leftMenuList,
    //     rightContent
    //   })
    // })

    // 1.使用 es7 的 async .... await 来发送请求
    const res = await request({ url:"/categories" });
      this.Cates = res;

      // 把接口的数据存到本地存储中
      wx.setStorageSync('cates', {
        time: Date.now(),
        data: this.Cates
      });

      // 构造左侧的大菜单数据
      let leftMenuList = this.Cates.map(v => v.cat_name);
      // 构造右侧的商品数据
      let rightContent = this.Cates[0].children;
      this.setData({
        leftMenuList,
        rightContent
      })
  },


  // 左侧菜单、
  handleItemTap(e) {
    // console.log(e);
    // 1.获取被点击的标题上的索引
    // 2.给data 中的 currentIndex 赋值就可以了
    // 3.根据不同的索引来渲染右侧的商品内容
    const {
      index
    } = e.currentTarget.dataset;

    let rightContent = this.Cates[index].children;
    // 重新设置商品栏回到顶部
    this.setData({
      currentIndex: index,
      rightContent,
      scrollTop:0
    })
  }
})